package JZ.JZ49;

/**
 * @author corn
 * @create 2020-08-15-19:46
 */

/**
 * JZ49 把字符串转换成整数
 *题目描述
 * 将一个字符串转换成一个整数，要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
 */
public class Solution {
    public int StrToInt(String str) {
        if(str==null||str.length()==0){
            return 0;
        }
        //tag代表正（1）负（0）index:字符串下标
        int tag = 1 ,index = 0;
        //ch代表index位置上的字符
        char ch = str.charAt(index);
        //判断正负
        if(ch == '+'){
            index = 1;
        }else if(ch == '-'){
            tag = 0;
            index = 1;
        }
        //保存字符串转换成的数值
        long res = 0;
        for (int i = index ;i < str.length() ;i++){
            char c = str.charAt(i);
            //判断是否包含数字以外的字符
            if (c >= '0' && c <= '9'){
                res = res * 10 + c - '0';//自动转化
                //判断是否越界：-2147483648~2147483647
                if(tag ==1 && res > Integer.MAX_VALUE){
                    throw new IllegalArgumentException("超上界");
                }
                if(tag == 0 && -res < Integer.MIN_VALUE){
                    throw new IllegalArgumentException("超下界");
                }
            }else{
                return 0;
            }
        }
        //判断正负，返回数值
        if(tag==0){
            return (int) -res;
        }else{
            return (int) res;
        }
    }
}
